#ifndef __ILIB_CORE_IO_H__
#define __ILIB_CORE_IO_H__

typedef int os_io_t;
class iMsgThread;
class iIOThread;
class iIORunner;
class iIO
{
public:
	enum IO_MASK
	{
		IO_MASK_NULL    = 0,
		IO_MASK_READ    = 1,
		IO_MASK_WRITE   = IO_MASK_READ<<1,
		IO_MASK_ACCEPT  = IO_MASK_READ<<2,
		IO_MASK_CONNECT = IO_MASK_READ<<3
	};
	inline iIO(os_io_t fd)
		:m_io(fd)
		,m_mask(IO_MASK_NULL)
		,m_processor(NULL)
		,m_launcher(NULL)
	{

	}
	inline os_io_t get_io() const { return m_io; }

	inline int get_io_mask() const { return m_mask;}

public:
	virtual int on_read() = 0;
	virtual int on_write() = 0;
	virtual int on_error() = 0;

protected:
	iIO();

protected:
	os_io_t		m_io;
	int 		m_mask;
	iIORunner*	m_processor;
	iMsgThread*	m_launcher;
};

#endif //__ILIB_CORE_IO_H__